// pages/my/modifyInfo/modifyInfo.js
import store from '../../../utils/store';
import {
  editUserInfo
} from '../../../api/user';
const app = getApp();
Page({
  data: {
    userInfo: null, // 用户信息
    genders: ['男', '女', '保密'], // 性别选项（文字）
    genderIndex: 0, // 当前选中的性别索引
  },

  // 生命周期函数--监听页面加载
  async onLoad(options) {
    await app.checkLoginStatus();
    // 从全局获取用户信息用于回显
    const userInfo = app.store.getUserInfo();
    if (userInfo) {
      // 将后端的性别数字转换为索引
      const genderIndex = userInfo.gender || 0; // 默认值为 0（男）
      this.setData({
        userInfo,
        genderIndex,
      });
    }
  },

  // 更换头像
  async changeAvatar() {
    try {
      // 调用微信 API 选择图片
      const res = await wx.chooseMedia({
        count: 1, // 只能选择一张图片
        mediaType: ['image'], // 只允许选择图片
        sourceType: ['album', 'camera'], // 可以从相册或相机选择
      });
      //用户没选图片，取消操作
      if (!res || !res.tempFiles || res.tempFiles.length === 0) {
        console.log('用户取消选择');
        return;
      }
      const tempFilePath = res.tempFiles[0].tempFilePath; // 获取临时文件路径

      // 显示加载中提示
      wx.showLoading({
        title: '上传中...',
      });

      // 上传图片到云存储
      const cloudPath = `user-avatars/${Date.now()}-${Math.floor(Math.random() * 1000)}.png`; // 云存储路径
      const uploadResult = await wx.cloud.uploadFile({
        cloudPath, // 云存储路径
        filePath: tempFilePath, // 本地文件路径
      });

      // 获取文件ID
      const fileID = uploadResult.fileID;
      if (!fileID) {
        throw new Error('更换头像失败');
      }
      // 先备份旧的 avatarFileID
      const oldFileID = this.data.userInfo.avatarFileID || '';

      //更新新头像
      this.setData({
        userInfo: {
          ...this.data.userInfo,
          avatarUrl: fileID
        }
      });
      // 存储fileID到数据库
      editUserInfo(userInfo);
      wx.showToast({
        title: '头像更换成功',
        icon: 'success',
      });

      // 删除旧头像（确保旧头像存在且不等于新头像）
      if (oldFileID && oldFileID !== fileID) {
        await wx.cloud.deleteFile({
          fileList: [oldFileID],
        });
        console.log('旧头像删除成功', oldFileID);
      }
      
    } catch (error) {
      if (error.errMsg.includes('cancel')) {
        console.log('用户取消选择');
        return; // 用户取消选择，不做任何操作
      }
      wx.showToast({
        title: '更换头像失败',
        icon: 'none',
      });
    } finally {
      wx.hideLoading();
    }
  },
  // 性别选择器变化事件
  bindGenderChange(e) {
    const genderIndex = e.detail.value; // 获取选中的索引
    const gender = genderIndex; // 性别值为数字（0: 男, 1: 女, 2: 保密）
    this.setData({
      genderIndex,
      userInfo: {
        ...this.data.userInfo,
        gender
      }, // 更新用户信息中的性别（数字）
    });
  },

  // 日期选择器变化事件
  bindDateChange(e) {
    const birthday = e.detail.value;
    this.setData({
      userInfo: {
        ...this.data.userInfo,
        birthday
      }, // 更新用户信息中的生日
    });
  },

  // 输入框变化事件
  handleInputChange(e) {
    const {
      field
    } = e.currentTarget.dataset;
    const value = e.detail.value;
    this.setData({
      userInfo: {
        ...this.data.userInfo,
        [field]: value
      }, // 更新用户信息中的对应字段
    });
  },

  // 保存用户信息
  async handleSave() {
    const {
      userInfo
    } = this.data;

    // 验证用户名是否为空
    if (!userInfo || !userInfo.username || userInfo.username.trim() === '') {
      wx.showToast({
        title: '用户名不能为空',
        icon: 'none',
      });
      return;
    }

    // 显示加载中提示
    wx.showLoading({
      title: '保存中...',
    });

    try {
      // 调用封装好的 editUserInfo 方法，直接发送 userInfo 对象
      const response = await editUserInfo(userInfo);
      if (response.success) {
        const app = getApp()
        // 更新全局 store 中的用户信息
        app.store.setUserInfo(userInfo);
        wx.showToast({
          title: '保存成功',
          icon: 'success',
        });

        // 返回上一页
        wx.navigateBack();
      } else {
        wx.showToast({
          title: '保存失败，请重试',
          icon: 'none',
        });
      }
    } catch (error) {
      wx.showToast({
        title: '网络错误，请重试',
        icon: 'none',
      });
    } finally {
      wx.hideLoading();
    }
  },

});